/* Copyright 2007-2008 dnAnalytics Project.
 *
 * Contributors to this file:
 * Patrick van der Velde
 *
 * This file is part of dnAnalytics.  dnAnalytics is licensed under the 
 * Microsoft Public License. See License.txt for a complete copy of the
 * license.
 */

using System;

namespace dnAnalytics.LinearAlgebra.Solvers.Iterative
{
    /// <summary>
    /// Defines the interface for objects that can create an iterative solver with
    /// specific settings. This interface is used to pass iterative solver creation 
    /// setup information around.
    /// </summary>
    public interface IIterativeSolverSetup
    {
        /// <summary>
        /// The type of the solver that will be created by this setup object.
        /// </summary>
        Type SolverType { get; }

        /// <summary>
        /// The type of preconditioner, if any, that will be created by this setup object.
        /// </summary>
        Type PreconditionerType { get; }

        /// <summary>
        /// Creates a fully functional iterative solver with the default settings
        /// given by this setup.
        /// </summary>
        /// <returns>A new <see cref="IIterativeSolver"/>.</returns>
        IIterativeSolver CreateNew();

        /// <summary>
        /// Indicates the relative speed of the solver. 
        /// </summary>
        /// <value>Returns a value between 0 and 1, inclusive.</value>
        double SolutionSpeed { get; }

        ///<summary>
        ///Indicates the relative reliability of the solver.
        ///</summary>
        /// <value>Returns a value between 0 and 1 inclusive.</value>
        double Reliability { get; }
    }
}